home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / bin / dexconf < prev    next >
Text File  |  2009-06-22  |  9KB  |  305 lines

  1. #!/bin/sh
  2.  
  3. # dexconf: Debian X server configuration file writer
  4. #
  5. # This tool is a backend which uses debconf database values.  It writes an
  6. # XFree86 X server configuration file based on the information in the database.
  7. #
  8. # Author: Branden Robinson
  9.  
  10. # Copyright 2000--2004 Progeny Linux Systems, Inc.
  11. #
  12. # This is free software; you may redistribute it and/or modify
  13. # it under the terms of the GNU General Public License as
  14. # published by the Free Software Foundation; either version 2,
  15. # or (at your option) any later version.
  16. #
  17. # This is distributed in the hope that it will be useful, but
  18. # WITHOUT ANY WARRANTY; without even the implied warranty of
  19. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20. # GNU General Public License for more details.
  21. #
  22. # You should have received a copy of the GNU General Public License with
  23. # the Debian operating system, in /usr/share/common-licenses/GPL;  if
  24. # not, write to the Free Software Foundation, Inc., 59 Temple Place,
  25. # Suite 330, Boston, MA 02111-1307 USA
  26.  
  27. set -e
  28.  
  29. # source debconf library
  30. . /usr/share/debconf/confmodule
  31.  
  32. # display a usage message
  33. usage () {
  34.   cat <<EOF
  35. Usage: $PROGNAME [OPTION ...]
  36.   write an Xorg X server configuration file based on debconf database values
  37. Options:
  38.   -h, --help                                 display this usage message and exit
  39.   -o FILE, --output=FILE                        write configuration file to FILE
  40. This help message is intended only as a quick reference.  For a description of
  41. the usage of $PROGNAME, see the $PROGNAME(1) manual page.
  42. EOF
  43. }
  44.  
  45. # the error-out function
  46. bomb () {
  47.   echo "$PROGNAME: error: $*" | fold -s -w "${COLUMNS:-80}" >&2
  48.   exit 1
  49. }
  50.  
  51. # wrapper around db_get to ensure that the info we try to retrieve exists; it
  52. # is (almost) always a fatal error for the values to be null
  53. fetch () {
  54.   db_get "$1" || true
  55.   if [ -z "$RET" ]; then
  56.     ERRMSG="cannot generate configuration file; $1 not set.  Aborting."
  57.     ERRMSG="$ERRMSG  Reconfigure the X server with \"dpkg-reconfigure"
  58.     ERRMSG="$ERRMSG xserver-xorg\" to correct this problem."
  59.     bomb "$ERRMSG"
  60.   fi
  61. }
  62.  
  63. # convert a debconf comma-delimited list to a shell whitespace-delimited list
  64. list_convert () {
  65.   echo $(IFS=", "; set -- $RET; while [ $# -gt 0 ]; do echo \"$1\"; shift; done)
  66. }
  67.  
  68. SERVER="xorg"
  69. XF86CONFIG=/etc/X11/xorg.conf
  70. PROGNAME=${0##*/}
  71. SHOWHELP=
  72. EARLYEXIT=
  73.  
  74. GETOPT_OUTPUT=$(getopt --options ho: \
  75.                        --longoptions help,output: \
  76.                        -n "$PROGNAME" -- "$@")
  77.  
  78. if [ $? -ne 0 ]; then
  79.     bomb "error while getting options; use \"$PROGNAME --help\" for help"
  80. fi
  81.  
  82. eval set -- "$GETOPT_OUTPUT"
  83.  
  84. while :; do
  85.     case "$1" in
  86.         -f|--format)
  87.           bomb "This option, and XFree86 3.x output, are no longer supported."
  88.           ;;
  89.         -h|--help) SHOWHELP=yes EARLYEXIT=yes ;;
  90.         -o|--output) XF86CONFIG="$2"; shift ;;
  91.         --) shift; break ;;
  92.         *)
  93.           bomb "unrecognized option \"$1\"; use \"$PROGNAME --help\" for help"
  94.           ;;
  95.     esac
  96.     shift
  97. done
  98.  
  99. if [ -n "$SHOWHELP" ]; then
  100.     usage
  101. fi
  102.  
  103. if [ -n "$EARLYEXIT" ]; then
  104.     exit 0
  105. fi
  106.  
  107. DEXCONFTMPDIR=
  108.  
  109. trap 'if [ -e "$DEXCONFTMPDIR/backup" ] && [ -n "$XF86CONFIG" ]; then \
  110.         cat "$DEXCONFTMPDIR/backup" >"$XF86CONFIG"; \
  111.       fi; \
  112.       exec 4<&-; \
  113.       rm -rf "$DEXCONFTMPDIR"; \
  114.       bomb "received signal; aborting"' HUP INT QUIT TERM
  115.  
  116.  
  117. # Set up a temporary directory for the files we'll be writing.
  118. TDIR_PARENT="${TMPDIR:-/tmp}"
  119. TDIR="${TMPDIR:-/tmp}/dexconf-tmp-$$"
  120.  
  121. if [ ! -d "$TDIR_PARENT" ]; then
  122.   bomb "cannot create temporary work directory; \"$TDIR_PARENT\" does not" \
  123.     "exist or is not a directory"
  124. fi
  125.  
  126. if [ ! -w "$TDIR_PARENT" ]; then
  127.   bomb "cannot create temporary work directory in \"$TDIR_PARENT\"; directory" \
  128.     "not writable"
  129. fi
  130.  
  131. rm -rf "$TDIR"
  132.  
  133. if mkdir -m 0700 "$TDIR"; then
  134.   DEXCONFTMPDIR="$TDIR"
  135. else
  136.   bomb "creation of temporary work directory \"$TDIR\" failed"
  137. fi
  138.  
  139. # xorg.conf sections:
  140. #   Files          File pathnames                    NOT USED BY DEXCONF
  141. #   ServerFlags    Server flags                      NOT USED BY DEXCONF
  142. #   Module         Dynamic module loading            NOT USED BY DEXCONF
  143. #   InputDevice    Input device description          NOT USED BY DEXCONF
  144. #   Device         Graphics device description
  145. #   VideoAdaptor   Xv video adaptor description      NOT USED BY DEXCONF
  146. #   Monitor        Monitor description
  147. #   Modes          Video modes descriptions          NOT USED BY DEXCONF
  148. #   Screen         Screen configuration
  149. #   ServerLayout   Overall layout                    NOT USED BY DEXCONF
  150. #   DRI            DRI-specific configuration        NOT USED BY DEXCONF
  151. #   Vendor         Vendor-specific configuration     NOT USED BY DEXCONF
  152.  
  153. ### HEADER
  154.  
  155. # Because debconf hijacks standard output and its confmodule uses file
  156. # descriptor 3 for its own purposes, we will write our output to file descriptor
  157. # 4 instead of standard output.
  158.  
  159. exec 4>"$DEXCONFTMPDIR/Header"
  160. cat >&4 <<SECTION
  161. # xorg.conf (X.Org X Window System server configuration file)
  162. #
  163. # This file was generated by dexconf, the Debian X Configuration tool, using
  164. # values from the debconf database.
  165. #
  166. # Edit this file with caution, and see the xorg.conf manual page.
  167. # (Type "man xorg.conf" at the shell prompt.)
  168. #
  169. # This file is automatically updated on xserver-xorg package upgrades *only*
  170. # if it has not been modified since the last upgrade of the xserver-xorg
  171. # package.
  172. #
  173. # Note that some configuration settings that could be done previously
  174. # in this file, now are automatically configured by the server and settings
  175. # here are ignored.
  176. #
  177. # If you have edited this file but would like it to be automatically updated
  178. # again, run the following command:
  179. #   sudo dpkg-reconfigure -phigh xserver-xorg
  180. SECTION
  181.  
  182. ### DEVICE
  183.  
  184. db_get xserver-$SERVER/config/device/bus_id
  185. DEVICE_BUSID="$RET"
  186.  
  187. QEMU_KVM=$(grep "QEMU Virtual CPU" /proc/cpuinfo || true)
  188. if [ -n "$QEMU_KVM" ]; then
  189.     DEVICE_DRIVER="cirrus"
  190.     QEMU_VGA=$(lspci -v |grep "Technical Corp. Device 1111" || true)
  191.     if [ -n "$QEMU_VGA" ]; then
  192.       DEVICE_DRIVER="vesa"
  193.     fi
  194. fi
  195. VBOX_VIDEO=$(grep -e "^vbox " /proc/modules || true)
  196. if [ -n "$VBOX_VIDEO" ]; then
  197.     DEVICE_DRIVER="vboxvideo"
  198. fi
  199.  
  200. exec 4>"$DEXCONFTMPDIR/Device"
  201. cat >&4 <<SECTION
  202. Section "Device"
  203.     Identifier    "Configured Video Device"
  204. SECTION
  205. if [ -n "$DEVICE_DRIVER" ]; then
  206.   printf "\tDriver\t\t\"$DEVICE_DRIVER\"\n" >&4
  207. fi
  208. PS3_FB=$(grep -i PS3 /proc/fb 2>/dev/null || true)
  209. if [ -n "$PS3_FB" ]; then
  210.   printf "\tOption\t\t\"ShadowFB\"\t\t\"false\"\n" >&4
  211. fi
  212. if [ -n "$DEVICE_BUSID" ]; then
  213.   printf "\tBusID\t\t\"$DEVICE_BUSID\"\n" >&4
  214. fi
  215. printf "EndSection\n" >&4
  216.  
  217. ### MONITOR
  218.  
  219. exec 4>"$DEXCONFTMPDIR/Monitor"
  220. cat >&4 <<SECTION
  221. Section "Monitor"
  222.     Identifier    "Configured Monitor"
  223. SECTION
  224.  
  225. if [ -n "$QEMU_KVM" ]; then
  226.   printf "\tHorizSync\t30-70\n" >&4
  227.   printf "\tVertRefresh\t50-160\n" >&4
  228. fi
  229. cat >&4 <<SECTION
  230. EndSection
  231. SECTION
  232.  
  233. ### SCREEN
  234.  
  235. exec 4>"$DEXCONFTMPDIR/Screen"
  236. cat >&4 <<SECTION
  237. Section "Screen"
  238.     Identifier    "Default Screen"
  239.     Monitor        "Configured Monitor"
  240.     Device        "Configured Video Device"
  241. SECTION
  242. if [ -n "$PS3_FB" ]; then
  243.   printf "\tDefaultFbBpp 32\n" >&4
  244. fi
  245. if [ -n "$QEMU_KVM" ]; then
  246. cat >&4 <<SUBSECTION
  247.     DefaultDepth    24
  248.     SubSection "Display"
  249.         Depth    24
  250.         Modes    "1280x800" "1152x768" "1024x768" "800x600" "640x480"
  251.     EndSubSection
  252. SUBSECTION
  253. fi
  254. printf "EndSection\n" >&4
  255.  
  256. # Close file descriptor 4 before we delete temporary files
  257. exec 4<&-
  258.  
  259. # Tell debconf to stop listening to us.
  260. db_stop
  261.  
  262. # Write the configuration file.  Put a blank line before every section we write
  263. # except the first.
  264.  
  265. OUTFILE="$DEXCONFTMPDIR/dexconf-out"
  266. umask 022
  267. : >"$OUTFILE"
  268.  
  269. SPACER=
  270. for SECTION in Header Device Monitor Screen; do
  271.   if [ -e "$DEXCONFTMPDIR/$SECTION" ]; then
  272.     eval $SPACER
  273.     cat "$DEXCONFTMPDIR/$SECTION" >>"$OUTFILE"
  274.     SPACER='echo "" >>"$OUTFILE"'
  275.   fi
  276. done
  277.  
  278. # Ensure we can write to our destination if it already exits.
  279. if [ -e "$XF86CONFIG" ]; then
  280.   if [ ! -w "$XF86CONFIG" ]; then
  281.     bomb "unable to write to \"$XF86CONFIG\""
  282.   fi
  283. fi
  284.  
  285. BACKUP=
  286. # Create a backup of the existing configuration file if it already exists.
  287. if [ -e "$XF86CONFIG" ]; then
  288.   cat "$XF86CONFIG" >"$DEXCONFTMPDIR/backup"
  289.   BACKUP=true
  290. fi
  291.  
  292. # Move the new file into place.
  293. if ! cat "$OUTFILE" >"$XF86CONFIG"; then
  294.   # Failed; try to restore the backup.
  295.   if [ -n "$BACKUP" ]; then
  296.     cat "$DEXCONFTMPDIR/backup" >"$XF86CONFIG"
  297.   fi
  298. fi
  299.  
  300. rm -rf "$DEXCONFTMPDIR"
  301.  
  302. exit 0
  303.  
  304. # vim:set ai et sts=2 sw=2 tw=80:
  305.